home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume24 / gnucalc / part44 < prev    next >
Encoding:
Text File  |  1991-11-01  |  55.5 KB  |  1,319 lines

  1. Newsgroups: comp.sources.misc
  2. From: daveg@synaptics.com (David Gillespie)
  3. Subject:  v24i092:  gnucalc - GNU Emacs Calculator, v2.00, Part44/56
  4. Message-ID: <1991Nov1.183754.21020@sparky.imd.sterling.com>
  5. X-Md4-Signature: 0969d0f8e53ab4b5855eadb3d104aa96
  6. Date: Fri, 1 Nov 1991 18:37:54 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: daveg@synaptics.com (David Gillespie)
  10. Posting-number: Volume 24, Issue 92
  11. Archive-name: gnucalc/part44
  12. Environment: Emacs
  13. Supersedes: gmcalc: Volume 13, Issue 27-45
  14.  
  15. ---- Cut Here and unpack ----
  16. #!/bin/sh
  17. # do not concatenate these parts, unpack them in order with /bin/sh
  18. # file calc.texinfo continued
  19. #
  20. if test ! -r _shar_seq_.tmp; then
  21.     echo 'Please unpack part 1 first!'
  22.     exit 1
  23. fi
  24. (read Scheck
  25.  if test "$Scheck" != 44; then
  26.     echo Please unpack part "$Scheck" next!
  27.     exit 1
  28.  else
  29.     exit 0
  30.  fi
  31. ) < _shar_seq_.tmp || exit 1
  32. if test ! -f _shar_wnt_.tmp; then
  33.     echo 'x - still skipping calc.texinfo'
  34. else
  35. echo 'x - continuing file calc.texinfo'
  36. sed 's/^X//' << 'SHAR_EOF' >> 'calc.texinfo' &&
  37. error form.  This includes the estimated error associated with
  38. the mean.  If the inputs are error forms, the error is the square
  39. root of the reciprocal of the sum of the reciprocals of the squares
  40. of the input errors.  (I.e., the variance is the reciprocal of the
  41. sum of the reciprocals of the variances.)
  42. @tex
  43. \turnoffactive
  44. $$ \sigma_\mu^2 = {1 \over \displaystyle \sum {1 \over \sigma_i^2}} $$
  45. @end tex
  46. If the inputs are plain
  47. numbers, the error is equal to the standard deviation of the values
  48. divided by the square root of the number of values.  (This works
  49. out to be equivalent to calculating the standard deviation and
  50. then assuming each value's error is equal to this standard
  51. deviation.)@refill
  52. @tex
  53. \turnoffactive
  54. $$ \sigma_\mu = {\sigma \over \sqrt N} $$
  55. @end tex
  56. X
  57. @kindex H u M
  58. @pindex calc-vector-median
  59. @tindex vmedian
  60. @cindex Median of data values
  61. The @kbd{H u M} (@code{calc-vector-median}) [@code{vmedian}]
  62. command computes the median of the data values.  The values are
  63. first sorted into numerical order; the median is the middle
  64. value after sorting.  (If the number of data values is even,
  65. the median is taken to be the average of the two middle values.)
  66. The median function is different from the other functions in
  67. this section in that the arguments must all be real numbers;
  68. variables are not accepted even when nested inside vectors.
  69. (Otherwise it is not possible to sort the data values.)  If
  70. any of the input values are error forms, their error parts are
  71. ignored.
  72. X
  73. The median function also accepts distributions.  For both normal
  74. (error form) and uniform (interval) distributions, the median is
  75. the same as the mean.
  76. X
  77. @kindex H I u M
  78. @pindex calc-vector-harmonic-mean
  79. @tindex vhmean
  80. @cindex Harmonic mean
  81. The @kbd{H I u M} (@code{calc-vector-harmonic-mean}) [@code{vhmean}]
  82. command computes the harmonic mean of the data values.  This is
  83. defined as the reciprocal of the arithmetic mean of the reciprocals
  84. of the values.
  85. @tex
  86. \turnoffactive
  87. $$ { N \over \displaystyle \sum {1 \over x_i} } $$
  88. @end tex
  89. X
  90. @kindex u G
  91. @pindex calc-vector-geometric-mean
  92. @tindex vgmean
  93. @cindex Geometric mean
  94. The @kbd{u G} (@code{calc-vector-geometric-mean}) [@code{vgmean}]
  95. command computes the geometric mean of the data values.  This
  96. is the @i{N}th root of the product of the values.  This is also
  97. equal to the @code{exp} of the arithmetic mean of the logarithms
  98. of the data values.
  99. @tex
  100. \turnoffactive
  101. $$ \exp \left ( \sum { \ln x_i } \right ) =
  102. X   \left ( \prod { x_i } \right)^{1 / N} $$
  103. @end tex
  104. X
  105. @kindex H u G
  106. @tindex agmean
  107. The @kbd{H u G} [@code{agmean}] command computes the ``arithmetic-geometric
  108. mean'' of two numbers taken from the stack.  This is computed by
  109. replacing the two numbers with their arithmetic mean and geometric
  110. mean, then repeating until the two values converge.
  111. @tex
  112. \turnoffactive
  113. $$ a_{i+1} = { a_i + b_i \over 2 } , \qquad b_{i+1} = \sqrt{a_i b_i} $$
  114. @end tex
  115. X
  116. @cindex Root-mean-square
  117. Another commonly used mean, the RMS (root-mean-square), can be computed
  118. for a vector of numbers simply by using the @kbd{A} command.
  119. X
  120. @kindex u S
  121. @pindex calc-vector-sdev
  122. @tindex vsdev
  123. @cindex Standard deviation
  124. @cindex Sample statistics
  125. The @kbd{u S} (@code{calc-vector-sdev}) [@code{vsdev}] command
  126. computes the standard deviation@c{ $\sigma$}
  127. @asis{ }of the data values.  If the
  128. values are error forms, the errors are used as weights just
  129. as for @kbd{u M}.  This is the @emph{sample} standard deviation,
  130. whose value is the square root of the sum of the squares of the
  131. differences between the values and the mean of the @cite{N} values,
  132. divided by @cite{N-1}.
  133. @tex
  134. \turnoffactive
  135. $$ \sigma^2 = {1 \over N - 1} \sum (x_i - \mu)^2 $$
  136. @end tex
  137. X
  138. This function also applies to distributions.  The standard deviation
  139. of a single error form is simply the error part.  The standard deviation
  140. of a continuous interval happens to equal the difference between the
  141. limits, divided by @c{$\sqrt{12}$}
  142. @cite{sqrt(12)}.  The standard deviation of an
  143. integer interval is the same as the standard deviation of a vector
  144. of those integers.
  145. X
  146. @kindex I u S
  147. @pindex calc-vector-pop-sdev
  148. @tindex vpsdev
  149. @cindex Population statistics
  150. The @kbd{I u S} (@code{calc-vector-pop-sdev}) [@code{vpsdev}]
  151. command computes the @emph{population} standard deviation.
  152. It is defined by the same formula as above but dividing
  153. by @cite{N} instead of by @cite{N-1}.  The population standard
  154. deviation is used when the input represents the entire set of
  155. data values in the distribution; the sample standard deviation
  156. is used when the input represents a sample of the set of all
  157. data values, so that the mean computed from the input is itself
  158. only an estimate of the true mean.
  159. @tex
  160. \turnoffactive
  161. $$ \sigma^2 = {1 \over N} \sum (x_i - \mu)^2 $$
  162. @end tex
  163. X
  164. For error forms and continuous intervals, @code{vpsdev} works
  165. exactly like @code{vsdev}.  For integer intervals, it computes the
  166. population standard deviation of the equivalent vector of integers.
  167. X
  168. @kindex H u S
  169. @kindex H I u S
  170. @pindex calc-vector-variance
  171. @pindex calc-vector-pop-variance
  172. @tindex vvar
  173. @tindex vpvar
  174. @cindex Variance of data values
  175. The @kbd{H u S} (@code{calc-vector-variance}) [@code{vvar}] and
  176. @kbd{H I u S} (@code{calc-vector-pop-variance}) [@code{vpvar}]
  177. commands compute the variance of the data values.  The variance
  178. is the square@c{ $\sigma^2$}
  179. @asis{ }of the standard deviation, i.e., the sum of the
  180. squares of the deviations of the data values from the mean.
  181. (This definition also applies when the argument is a distribution.)
  182. X
  183. @tindex vflat
  184. The @code{vflat} algebraic function returns a vector of its
  185. arguments, interpreted in the same way as the other functions
  186. in this section.  For example, @samp{vflat(1, [2, [3, 4]], 5)}
  187. returns @samp{[1, 2, 3, 4, 5]}.
  188. X
  189. @node Paired-Sample Statistics, , Single-Variable Statistics, Statistical Operations
  190. @subsection Paired-Sample Statistics
  191. X
  192. @noindent
  193. The functions in this section take two arguments, which must be
  194. vectors of equal size.  The vectors are each flattened in the same
  195. way as by the single-variable statistical functions.  Given a numeric
  196. prefix argument of 1, these functions instead take one object from
  197. the stack, which must be an @c{$N\times2$}
  198. @asis{Nx2} matrix of data values.  Once
  199. again, variable names can be used in place of actual vectors and
  200. matrices.
  201. X
  202. @kindex u C
  203. @pindex calc-vector-covariance
  204. @tindex vcov
  205. @cindex Covariance
  206. The @kbd{u C} (@code{calc-vector-covariance}) [@code{vcov}] command
  207. computes the sample covariance of two vectors.  The covariance
  208. of vectors @var{x} and @var{y} is the sum of the products of the
  209. differences between the elements of @var{x} and the mean of @var{x}
  210. times the differences between the corresponding elements of @var{y}
  211. and the mean of @var{y}, all divided by @cite{N-1}.  Note that
  212. the variance of a vector is just the covariance of the vector
  213. with itself.  Once again, if the inputs are error forms the
  214. errors are used as weight factors.  If both @var{x} and @var{y}
  215. are composed of error forms, the error for a given data point
  216. is taken as the square root of the sum of the squares of the two
  217. input errors.
  218. @tex
  219. \turnoffactive
  220. $$ \sigma_{x\!y}^2 = {1 \over N-1} \sum (x_i - \mu_x) (y_i - \mu_y) $$
  221. $$ \sigma_{x\!y}^2 =
  222. X    {\displaystyle {1 \over N-1}
  223. X                   \sum {(x_i - \mu_x) (y_i - \mu_y) \over \sigma_i^2}
  224. X     \over \displaystyle {1 \over N} \sum {1 \over \sigma_i^2}}
  225. $$
  226. @end tex
  227. X
  228. @kindex I u C
  229. @pindex calc-vector-pop-covariance
  230. @tindex vpcov
  231. The @kbd{I u C} (@code{calc-vector-pop-covariance}) [@code{vpcov}]
  232. command computes the population covariance, which is the same as the
  233. sample covariance computed by @kbd{u C} except dividing by @cite{N}
  234. instead of @cite{N-1}.
  235. X
  236. @kindex H u C
  237. @pindex calc-vector-correlation
  238. @tindex vcorr
  239. @cindex Correlation coefficient
  240. @cindex Linear correlation
  241. The @kbd{H u C} (@code{calc-vector-correlation}) [@code{vcorr}]
  242. command computes the linear correlation coefficient of two vectors.
  243. This is defined by the covariance of the vectors divided by the
  244. product of their standard deviations.  (There is no difference
  245. between sample or population statistics here.)
  246. @tex
  247. \turnoffactive
  248. $$ r_{x\!y} = { \sigma_{x\!y}^2 \over \sigma_x^2 \sigma_y^2 } $$
  249. @end tex
  250. X
  251. @node Reducing and Mapping, Vector and Matrix Formats, Statistical Operations, Matrix Functions
  252. @section Reducing and Mapping Vectors
  253. X
  254. @noindent
  255. The commands in this section allow for more general operations on the
  256. elements of vectors.
  257. X
  258. @kindex V A
  259. @pindex calc-apply
  260. @tindex apply
  261. The simplest of these operations is @kbd{V A} (@code{calc-apply})
  262. [@code{apply}], which applies a given operator to the elements of a vector.
  263. For example, applying the hypothetical function @code{f} to the vector
  264. @samp{[1, 2, 3]} would produce the function call @samp{f(1, 2, 3)}.
  265. Applying the @code{+} function to the vector @samp{[a, b]} gives
  266. @samp{a + b}.  Applying @code{+} to the vector @samp{[a, b, c]} is an
  267. error, since the @code{+} function expects exactly two arguments.
  268. X
  269. While @kbd{V A} is useful in some cases, you will usually find that either
  270. @kbd{V R} or @kbd{V M}, described below, is closer to what you want.
  271. X
  272. @menu
  273. * Specifying Operators::
  274. * Mapping::
  275. * Reducing::
  276. * Nesting and Fixed Points::
  277. * Generalized Products::
  278. @end menu
  279. X
  280. @node Specifying Operators, Mapping, Reducing and Mapping, Reducing and Mapping
  281. @subsection Specifying Operators
  282. X
  283. @noindent
  284. Commands in this section (like @kbd{V A}) prompt you to press the key
  285. corresponding to the desired operator.  Press @kbd{?} for a partial
  286. list of the available operators.  Generally, an operator is any key or
  287. sequence of keys that would normally take one or more arguments from
  288. the stack and replace them with a result.  For example, @kbd{V A H C}
  289. uses the hyperbolic cosine operator, @code{cosh}.  (Since @code{cosh}
  290. expects one argument, @kbd{V A H C} requires a vector with a single
  291. element as its argument.)
  292. X
  293. You can press @kbd{x} at the operator prompt to select any algebraic
  294. function by name to use as the operator.  This includes functions you
  295. have defined yourself using the @kbd{Z F} command.  (@xref{Algebraic
  296. Definitions}.)  If you give a name for which no function has been
  297. defined, the result is left in symbolic form, as in @samp{f(1, 2, 3)}.
  298. Calc will prompt for the number of arguments the function takes if it
  299. can't figure it out on its own (say, because you named a function that
  300. is currently undefined).  It is also possible to type a digit key before
  301. the function name to specify the number of arguments, e.g.,
  302. @kbd{V M 3 x f RET} calls @code{f} with three arguments even if it
  303. looks like it ought to have only two.  This technique may be necessary
  304. if the function allows a variable number of arguments.  For example,
  305. the @kbd{v e} [@code{vexp}] function accepts two or three arguments;
  306. if you want to map with the three-argument version, you will have to
  307. type @kbd{V M 3 v e}.
  308. X
  309. It is also possible to apply any formula to a vector by treating that
  310. formula as a function.  When prompted for the operator to use, press
  311. @kbd{'} (the apostrophe) and type your formula as an algebraic entry.
  312. You will then be prompted for the argument list, which defaults to a
  313. list of all variables that appear in the formula, sorted into alphabetic
  314. order.  For example, suppose you enter the formula @samp{x + 2y^x}.
  315. The default argument list would be @samp{(x y)}, which means that if
  316. this function is applied to the arguments @samp{[3, 10]} the result will
  317. be @samp{3 + 2*10^3}.  (If you plan to use a certain formula in this
  318. way often, you might consider defining it as a function with @kbd{Z F}.)
  319. X
  320. Another way to specify the arguments to the formula you enter is with
  321. @kbd{$}, @kbd{$$}, and so on.  For example, @kbd{V A ' $$ + 2$^$$}
  322. has the same effect as the previous example.  The argument list is
  323. automatically taken to be @samp{($$ $)}.  (The order of the arguments
  324. may seem backwards, but it is analogous to the way normal algebraic
  325. entry interacts with the stack.)
  326. X
  327. If you press @kbd{$} at the operator prompt, the effect is similar to
  328. the apostrophe except that the relevant formula is taken from top-of-stack
  329. instead.  The actual vector arguments of the @kbd{V A $} or related command
  330. then start at the second-to-top stack position.  You will still be
  331. prompted for an argument list.
  332. X
  333. @cindex Nameless functions
  334. @cindex Generic functions
  335. A function can be written without a name using the notation @samp{<#1 - #2>},
  336. which means ``a function of two arguments that computes the first
  337. argument minus the second argument.''  The symbols @samp{#1} and @samp{#2}
  338. are placeholders for the arguments.  You can use any names for these
  339. placeholders if you wish, by including an argument list followed by a
  340. colon:  @samp{<x, y : x - y>}.  When you type @kbd{V M ' $$ + 2$^$$ RET},
  341. Calc builds the nameless function @samp{<#1 + 2 #2^#1>} as the function
  342. to map across the vectors.  When you type @kbd{V M ' x + 2y^x RET RET},
  343. Calc builds the nameless function @samp{<x, y : x + 2 y^x>}.  In both
  344. cases, Calc also writes the nameless function to the Trail so that you
  345. can get it back later if you wish.
  346. X
  347. If there is only one argument, you can write @samp{#} in place of @samp{#1}.
  348. (Note that @samp{< >} notation is also used for date forms.  Calc tells
  349. that @samp{<@var{stuff}>} is a nameless function by the presence of
  350. @samp{#} signs inside @var{stuff}, or by the fact that @var{stuff}
  351. begins with a list of variables followed by a colon.)
  352. X
  353. You can type a nameless function directly to @kbd{V M '}, or put one on
  354. the stack and use it with @kbd{V M $}.  Calc will not prompt for an
  355. argument list in this case, since the nameless function specifies the
  356. argument list as well as the function itself.  In @kbd{V M '}, you can
  357. omit the @samp{< >} marks if you use @samp{#} notation for the arguments,
  358. so that @kbd{V M ' #1+#2 RET} is the same as @kbd{V M ' <#1+#2> RET},
  359. which in turn is the same as @kbd{V M ' $$+$ RET}.
  360. X
  361. @cindex Lambda expressions
  362. @tindex lambda
  363. The internal format for @samp{<x, y : x + y>} is @samp{lambda(x, y, x + y)}.
  364. (The word @code{lambda} derives from Lisp notation and the theory of
  365. functions.)  The internal format for @samp{<#1 + #2>} is @samp{lambda(ArgA,
  366. ArgB, ArgA + ArgB)}.  Note that there is no actual Calc function called
  367. @code{lambda}; the whole point is that the @code{lambda} expression is
  368. used in its symbolic form, not evaluated for an answer until it is applied
  369. to specific arguments by a command like @kbd{V A} or @kbd{V M}.
  370. X
  371. (Actually, @code{lambda} does have one special property:  Its arguments
  372. are never evaluated; for example, putting @samp{<(2/3) #>} on the stack
  373. will not simplify the @samp{2/3} until the nameless function is actually
  374. called.)
  375. X
  376. @tindex add
  377. @tindex sub
  378. @tindex mul
  379. @tindex div
  380. @tindex pow
  381. @tindex neg
  382. @tindex mod
  383. @tindex vconcat
  384. As usual, commands like @kbd{V A} have algebraic function name equivalents.
  385. For example, @kbd{V A k g} with an argument of @samp{v} is equivalent to
  386. @samp{apply(gcd, v)}.  The first argument specifies the operator name,
  387. and is either a variable whose name is the same as the function name,
  388. or a nameless function like @samp{<#^3+1>}.  Operators that are normally
  389. written as algebraic symbols have the names @code{add}, @code{sub},
  390. @code{mul}, @code{div}, @code{pow}, @code{neg}, @code{mod}, and
  391. @code{vconcat}.@refill
  392. X
  393. @tindex call
  394. The @code{call} function builds a function call out of several arguments:
  395. @samp{call(gcd, x, y)} is the same as @samp{apply(gcd, [x, y])}, which
  396. in turn is the same as @samp{gcd(x, y)}.  The first argument of @code{call},
  397. like the other functions described here, may be either a variable naming a
  398. function, or a nameless function (@samp{call(<#1+2#2>, x, y)} is the same
  399. as @samp{x + 2y}).
  400. X
  401. (Experts will notice that it's not quite proper to use a variable to name
  402. a function, since the name @code{gcd} corresponds to the Lisp variable
  403. @code{var-gcd} but to the Lisp function @code{calcFunc-gcd}.  Calc
  404. automatically makes this translation, so you don't have to worry
  405. about it.)
  406. X
  407. @node Mapping, Reducing, Specifying Operators, Reducing and Mapping
  408. @subsection Mapping
  409. X
  410. @noindent
  411. @kindex V M
  412. @pindex calc-map
  413. @tindex map
  414. The @kbd{V M} (@code{calc-map}) [@code{map}] command applies a given
  415. operator elementwise to one or more vectors.  For example, mapping
  416. @code{A} [@code{abs}] produces a vector of the absolute values of the
  417. elements in the input vector.  Mapping @code{+} pops two vectors from
  418. the stack, which must be of equal length, and produces a vector of the
  419. pairwise sums of the elements.  If either argument is a non-vector, it
  420. is duplicated for each element of the other vector.  For example,
  421. @kbd{[1,2,3] 2 V M ^} squares the elements of the specified vector.
  422. With the 2 listed first, it would have computed a vector of powers of
  423. two.  Mapping a user-defined function pops as many arguments from the
  424. stack as the function requires.  If you give an undefined name, you will
  425. be prompted for the number of arguments to use.@refill
  426. X
  427. If any argument to @kbd{V M} is a matrix, the operator is normally mapped
  428. across all elements of the matrix.  For example, given the matrix
  429. @cite{[[1, -2, 3], [-4, 5, -6]]}, @kbd{V M A} takes six absolute values to
  430. produce another @c{$3\times2$}
  431. @asis{3x2} matrix, @cite{[[1, 2, 3], [4, 5, 6]]}.
  432. X
  433. @tindex mapr
  434. The command @kbd{V M _} [@code{mapr}] (i.e., type an underscore at the
  435. operator prompt) maps by rows instead.  For example, @kbd{V M _ A} views
  436. the above matrix as a vector of two 3-element row vectors.  It produces
  437. a new vector which contains the absolute values of those row vectors,
  438. namely @cite{[3.74, 8.77]}.  (Recall, the absolute value of a vector is
  439. defined as the square root of the sum of the squares of the elements.)
  440. Some operators accept vectors and return new vectors; for example,
  441. @kbd{v v} reverses a vector, so @kbd{V M _ v v} would reverse each row
  442. of the matrix to get a new matrix, @cite{[[3, -2, 1], [-6, 5, -4]]}.
  443. X
  444. Sometimes a vector of vectors (representing, say, strings, sets, or lists)
  445. happens to look like a matrix.  If so, remember to use @kbd{V M _} if you
  446. want to map a function across the whole strings or sets rather than across
  447. their individual elements.
  448. X
  449. @tindex mapc
  450. The command @kbd{V M :} [@code{mapc}] maps by columns.  Basically, it
  451. transposes the input matrix, maps by rows, and then, if the result is a
  452. matrix, transposes again.  For example, @kbd{V M : A} takes the absolute
  453. values of the three columns of the matrix, treating each as a 2-vector,
  454. and @kbd{V M : v v} reverses the columns to get the matrix
  455. @cite{[[-4, 5, -6], [1, -2, 3]]}.
  456. X
  457. (The symbols @kbd{_} and @kbd{:} were chosen because they had row-like
  458. and column-like appearances, and were not already taken by useful
  459. operators.  Also, they appear shifted on most keyboards so they are easy
  460. to type after @kbd{V M}.)
  461. X
  462. The @kbd{_} and @kbd{:} modifiers have no effect on arguments that are
  463. not matrices (so if none of the arguments are matrices, they have no
  464. effect at all).  If some of the arguments are matrices and others are
  465. plain numbers, the plain numbers are held constant for all rows of the
  466. matrix (so that @kbd{2 V M _ ^} squares every row of a matrix; squaring
  467. a vector takes a dot product of the vector with itself).
  468. X
  469. If some of the arguments are vectors with the same lengths as the
  470. rows (for @kbd{V M _}) or columns (for @kbd{V M :}) of the matrix
  471. arguments, those vectors are also held constant for every row or
  472. column.
  473. X
  474. Sometimes it is useful to specify another mapping command as the operator
  475. to use with @kbd{V M}.  For example, @kbd{V M _ V A +} applies @kbd{V A +}
  476. to each row of the input matrix, which in turn adds the two values on that
  477. row.  If you give another vector-operator command as the operator for
  478. @kbd{V M}, it automatically uses map-by-rows mode if you don't specify
  479. otherwise; thus @kbd{V M V A +} is equivalent to @kbd{V M _ V A +}.  (If
  480. you really want to map-by-elements another mapping command, you can use
  481. a triple-nested mapping command:  @kbd{V M V M V A +} means to map
  482. @kbd{V M V A +} over the rows of the matrix; in turn, @kbd{V A +} is
  483. mapped over the elements of each row.)
  484. X
  485. @tindex mapa
  486. @tindex mapd
  487. Previous versions of Calc had ``map across'' and ``map down'' modes
  488. that are now considered obsolete; the old ``map across'' is now simply
  489. @kbd{V M V A}, and ``map down'' is now @kbd{V M : V A}.  The algebraic
  490. functions @code{mapa} and @code{mapd} are still supported, though.
  491. Note also that, while the old mapping modes were persistent (once you
  492. set the mode, it would apply to later mapping commands until you reset
  493. it), the new @kbd{:} and @kbd{_} modifiers apply only to the current
  494. mapping command.  The default @kbd{V M} always means map-by-elements.
  495. X
  496. @xref{Algebraic Manipulation}, for the @kbd{a M} command, which is like
  497. @kbd{V M} but for equations and inequalities instead of vectors.
  498. @xref{Storing Variables}, for the @kbd{s m} command which modifies a
  499. variable's stored value using a @kbd{V M}-like operator.
  500. X
  501. @node Reducing, Nesting and Fixed Points, Mapping, Reducing and Mapping
  502. @subsection Reducing
  503. X
  504. @noindent
  505. @kindex V R
  506. @pindex calc-reduce
  507. @tindex reduce
  508. The @kbd{V R} (@code{calc-reduce}) [@code{reduce}] command applies a given
  509. binary operator across all the elements of a vector.  A binary operator is
  510. a function such as @code{+} or @code{max} which takes two arguments.  For
  511. example, reducing @code{+} over a vector computes the sum of the elements
  512. of the vector.  Reducing @code{-} computes the first element minus each of
  513. the remaining elements.  Reducing @code{max} computes the maximum element
  514. and so on.  In general, reducing @code{f} over the vector @samp{[a, b, c, d]}
  515. produces @samp{f(f(f(a, b), c), d)}.
  516. X
  517. @kindex I V R
  518. @tindex rreduce
  519. The @kbd{I V R} [@code{rreduce}] command is similar to @kbd{V R} except
  520. that works from right to left through the vector.  For example, plain
  521. @kbd{V R -} on the vector @samp{[a, b, c, d]} produces @samp{a - b - c - d}
  522. but @kbd{I V R -} on the same vector produces @samp{a - (b - (c - d))},
  523. or @samp{a - b + c - d}.  This ``alternating sum'' occurs frequently
  524. in power series expansions.
  525. X
  526. @kindex V U
  527. @tindex accum
  528. The @kbd{V U} (@code{calc-accumulate}) [@code{accum}] command does an
  529. accumulation operation.  Here Calc does the corresponding reduction
  530. operation, but instead of producing only the final result, it produces
  531. a vector of all the intermediate results.  Accumulating @code{+} over
  532. the vector @samp{[a, b, c, d]} produces the vector
  533. @samp{[a, a + b, a + b + c, a + b + c + d]}.
  534. X
  535. @kindex I V U
  536. @tindex raccum
  537. The @kbd{I V U} [@code{raccum}] command does a right-to-left accumulation.
  538. For example, @kbd{I V U -} on the vector @samp{[a, b, c, d]} produces the
  539. vector @samp{[a - b + c - d, b - c + d, c - d, d]}.
  540. X
  541. @tindex reducea
  542. @tindex rreducea
  543. @tindex reduced
  544. @tindex rreduced
  545. As for @kbd{V M}, @kbd{V R} normally reduces a matrix elementwise.  For
  546. example, given the matrix @cite{[[a, b, c], [d, e, f]]}, @kbd{V R +} will
  547. compute @cite{a + b + c + d + e + f}.  You can type @kbd{V R _} or
  548. @kbd{V R :} to modify this behavior.  The @kbd{V R _} [@code{reducea}]
  549. command reduces ``across'' the matrix; it reduces each row of the matrix
  550. as a vector, then collects the results.  Thus @kbd{V R _ +} of this
  551. matrix would produce @cite{[a + b + c, d + e + f]}.  Similarly, @kbd{V R :}
  552. [@code{reduced}] reduces down; @kbd{V R : +} would produce @cite{[a + d,
  553. b + e, c + f]}.
  554. X
  555. @tindex reducer
  556. @tindex rreducer
  557. There is a third ``by rows'' mode for reduction that is occasionally
  558. useful; @kbd{V R =} [@code{reducer}] simply reduces the operator over
  559. the rows of the matrix themselves.  Thus @kbd{V R = +} on the above
  560. matrix would get the same result as @kbd{V R : +}, since adding two
  561. row vectors is equivalent to adding their elements.  But @kbd{V R = *}
  562. would multiply the two rows (to get a single number, their dot product),
  563. while @kbd{V R : *} would produce a vector of the products of the columns.
  564. X
  565. These three matrix reduction modes work with @kbd{V R} and @kbd{I V R},
  566. but they are not currently supported with @kbd{V U} or @kbd{I V U}.
  567. X
  568. @tindex reducec
  569. @tindex rreducec
  570. The obsolete reduce-by-columns function, @code{reducec}, is still
  571. supported but there is no way to get it through the @kbd{V R} command.
  572. X
  573. The commands @kbd{M-# :} and @kbd{M-# _} are equivalent to typing
  574. @kbd{M-# r} to grab a rectangle of data into Calc, and then typing
  575. @kbd{V R : +} or @kbd{V R _ +}, respectively, to sum the columns or
  576. rows of the matrix.  @xref{Grabbing From Buffers}.
  577. X
  578. @node Nesting and Fixed Points, Generalized Products, Reducing, Reducing and Mapping
  579. @subsection Nesting and Fixed Points
  580. X
  581. @noindent
  582. @kindex H V R
  583. @tindex nest
  584. The @kbd{H V R} [@code{nest}] command applies a function to a given
  585. argument repeatedly.  It takes two values, @samp{a} and @samp{n}, from
  586. the stack, where @samp{n} must be an integer.  It then applies the
  587. function nested @samp{n} times; if the function is @samp{f} and @samp{n}
  588. is 3, the result is @samp{f(f(f(a)))}.  The number @samp{n} may be
  589. negative if Calc knows an inverse for the function @samp{f}; for
  590. example, @samp{nest(sin, a, -2)} returns @samp{arcsin(arcsin(a))}.
  591. X
  592. @kindex H V U
  593. @tindex anest
  594. The @kbd{H V U} [@code{anest}] command is an accumulating version of
  595. @code{nest}:  It returns a vector of @samp{n+1} values, e.g.,
  596. @samp{[a, f(a), f(f(a)), f(f(f(a)))]}.  If @samp{n} is negative and
  597. @samp{F} is the inverse of @samp{f}, then the result is of the
  598. form @samp{[a, F(a), F(F(a)), F(F(F(a)))]}.
  599. X
  600. @kindex H I V R
  601. @tindex fixp
  602. @cindex Fixed points
  603. The @kbd{H I V R} [@code{fixp}] command is like @kbd{H V R}, except
  604. that it takes only an @samp{a} value from the stack; the function is
  605. applied until it reaches a ``fixed point,'' i.e., until the result
  606. no longer changes.
  607. X
  608. @kindex H I V U
  609. @tindex afixp
  610. The @kbd{H I V U} [@code{afixp}] command is an accumulating @code{fixp}.
  611. The first element of the return vector will be the initial value @samp{a};
  612. the last element will be the final result that would have been returned
  613. by @code{fixp}.
  614. X
  615. For example, 0.739085 is a fixed point of the cosine function (in radians):
  616. @samp{cos(0.739085) = 0.739085}.  You can find this value by putting, say,
  617. 1.0 on the stack and typing @kbd{H I V U C}.  (We use the accumulating
  618. version so we can see the intermediate results:  @samp{[1, 0.540302, 0.857553,
  619. 0.65329, ...]}.  With a precision of six, this command will take 36 steps
  620. to converge to 0.739085.)
  621. X
  622. Newton's method for finding roots is a classic example of iteration
  623. to a fixed point.  To find the square root of five starting with an
  624. initial guess, Newton's method would look for a fixed point of the
  625. function @samp{(x + 5/x) / 2}.  Putting a guess of 1 on the stack
  626. and typing @kbd{H I V R ' ($ + 5/$)/2 RET} quickly yields the result
  627. 2.23607.  This is equivalent to using the @kbd{a R} (@code{calc-find-root})
  628. command to find a root of the equation @samp{x^2 = 5}.
  629. X
  630. These examples used numbers for @samp{a} values.  Calc keeps applying
  631. the function until two successive results are equal to within the
  632. current precision.  For complex numbers, both the real parts and the
  633. imaginary parts must be equal to within the current precision.  If
  634. @samp{a} is a formula (say, a variable name), then the function is
  635. applied until two successive results are exactly the same formula.
  636. It is up to you to ensure that the function will eventually converge;
  637. if it doesn't, you may have to press @kbd{C-g} to stop the Calculator.
  638. X
  639. The algebraic @code{fixp} function takes two optional arguments, @samp{n}
  640. and @samp{tol}.  The first is the maximum number of steps to be allowed,
  641. and must be either an integer or the symbol @samp{inf} (infinity, the
  642. default).  The second is a convergence tolerance.  If a tolerance is
  643. specified, all results during the calculation must be numbers, not
  644. formulas, and the iteration stops when the magnitude of the difference
  645. between two successive results is less than or equal to the tolerance.
  646. (This implies that a tolerance of zero iterates until the results are
  647. exactly equal.)
  648. X
  649. Putting it all together, @samp{fixp(<(# + A/#)/2>, B, 20, 1e-10)}
  650. computes the square root of @samp{A} given the initial guess @samp{B},
  651. stopping when the result is correct within the specified tolerance, or
  652. when 20 steps have been taken, whichever is sooner.
  653. X
  654. @node Generalized Products, , Nesting and Fixed Points, Reducing and Mapping
  655. @subsection Generalized Products
  656. X
  657. @kindex V O
  658. @pindex calc-outer-product
  659. @tindex outer
  660. The @kbd{V O} (@code{calc-outer-product}) [@code{outer}] command applies
  661. a given binary operator to all possible pairs of elements from two
  662. vectors, to produce a matrix.  For example, @kbd{V O *} with @samp{[a, b]}
  663. and @samp{[x, y, z]} on the stack produces a multiplication table:
  664. @samp{[[a x, a y, a z], [b x, b y, b z]]}.  Element @var{r},@var{c} of
  665. the result matrix is obtained by applying the operator to element @var{r}
  666. of the lefthand vector and element @var{c} of the righthand vector.
  667. X
  668. @kindex V I
  669. @pindex calc-inner-product
  670. @tindex inner
  671. The @kbd{V I} (@code{calc-inner-product}) [@code{inner}] command computes
  672. the generalized inner product of two vectors or matrices, given a
  673. ``multiplicative'' operator and an ``additive'' operator.  These can each
  674. actually be any binary operators; if they are @samp{*} and @samp{+},
  675. respectively, the result is a standard matrix multiplication.  Element
  676. @var{r},@var{c} of the result matrix is obtained by mapping the
  677. multiplicative operator across row @var{r} of the lefthand matrix and
  678. column @var{c} of the righthand matrix, and then reducing with the additive
  679. operator.  Just as for the standard @kbd{*} command, this can also do a
  680. vector-matrix or matrix-vector inner product, or a vector-vector
  681. generalized dot product.
  682. X
  683. Since @kbd{V I} requires two operators, it prompts twice.  In each case,
  684. you can use any of the usual methods for entering the operator.  If you
  685. use @kbd{$} twice to take both operator formulas from the stack, the
  686. first (multiplicative) operator is taken from the top of the stack
  687. and the second (additive) operator is taken from second-to-top.
  688. X
  689. @node Vector and Matrix Formats, , Reducing and Mapping, Matrix Functions
  690. @section Vector and Matrix Display Formats
  691. X
  692. @noindent
  693. Commands for controlling vector and matrix display use the @kbd{v} prefix
  694. instead of the usual @kbd{d} prefix.  But they are display modes; in
  695. particular, they are influenced by the @kbd{I} and @kbd{H} prefix keys
  696. in the same way (@pxref{Display Modes}).  Matrix display is also
  697. influenced by the @kbd{d O} (@code{calc-flat-language}) mode;
  698. @pxref{Normal Language Modes}.
  699. X
  700. @kindex v <
  701. @pindex calc-matrix-left-justify
  702. @kindex v =
  703. @pindex calc-matrix-center-justify
  704. @kindex v >
  705. @pindex calc-matrix-right-justify
  706. The commands @kbd{v <} (@code{calc-matrix-left-justify}), @kbd{v >}
  707. (@code{calc-matrix-right-justify}), and @kbd{v =}
  708. (@code{calc-matrix-center-justify}) control whether matrix elements
  709. are justified to the left, right, or center of their columns.@refill
  710. X
  711. @kindex v [
  712. @pindex calc-vector-brackets
  713. @kindex v @{
  714. @pindex calc-vector-braces
  715. @kindex v (
  716. @pindex calc-vector-parens
  717. The @kbd{v [} (@code{calc-vector-brackets}) command turns the square
  718. brackets that surround vectors and matrices displayed in the stack on
  719. and off.  The @kbd{v @{} (@code{calc-vector-braces}) and @kbd{v (}
  720. (@code{calc-vector-parens}) commands use curly braces or parentheses,
  721. respectively, instead of square brackets.  For example, @kbd{v @{} might
  722. be used in preparation for yanking a matrix into a buffer running
  723. Mathematica.  (In fact, the Mathematica language mode uses this mode;
  724. @pxref{Mathematica Language Mode}.)  Note that, regardless of the
  725. display mode, either brackets or braces may be used to enter vectors,
  726. and parentheses may never be used for this purpose.@refill
  727. X
  728. @kindex v ]
  729. @pindex calc-matrix-brackets
  730. The @kbd{v ]} (@code{calc-matrix-brackets}) command controls the
  731. ``big'' style display of matrices.  It prompts for a string of code
  732. letters; currently implemented letters are @code{R}, which enables
  733. brackets on each row of the matrix; @code{O}, which enables outer
  734. brackets in opposite corners of the matrix; and @code{C}, which
  735. enables commas or semicolons at the ends of all rows but the last.
  736. The default format is @samp{RO}.  (Before Calc 2.00, the format
  737. was fixed at @samp{ROC}.)  Here are some example matrices:
  738. X
  739. @group
  740. @example
  741. [ [ 123,  0,   0  ]       [ [ 123,  0,   0  ],
  742. X  [  0,  123,  0  ]         [  0,  123,  0  ],
  743. X  [  0,   0,  123 ] ]       [  0,   0,  123 ] ]
  744. X
  745. X         RO                        ROC
  746. X
  747. @end example
  748. @end group
  749. @noindent
  750. @group
  751. @example
  752. X  [ 123,  0,   0            [ 123,  0,   0 ;
  753. X     0,  123,  0               0,  123,  0 ;
  754. X     0,   0,  123 ]            0,   0,  123 ]
  755. X
  756. X          O                        OC
  757. X
  758. @end example
  759. @end group
  760. @noindent
  761. @group
  762. @example
  763. X  [ 123,  0,   0  ]           123,  0,   0
  764. X  [  0,  123,  0  ]            0,  123,  0
  765. X  [  0,   0,  123 ]            0,   0,  123
  766. X
  767. X          R                       @r{blank}
  768. @end example
  769. @end group
  770. X
  771. @noindent
  772. Note that of the formats shown here, @samp{RO}, @samp{ROC}, and
  773. @samp{OC} are all recognized as matrices during reading, while
  774. the others are useful for display only.
  775. X
  776. @kindex v ,
  777. @pindex calc-vector-commas
  778. The @kbd{v ,} (@code{calc-vector-commas}) command turns commas on and
  779. off in vector and matrix display.@refill
  780. X
  781. In vectors of length one, and in all vectors when commas have been
  782. turned off, Calc adds extra parentheses around formulas that might
  783. otherwise be ambiguous.  For example, @samp{[a b]} could be a vector
  784. of the one formula @samp{a b}, or it could be a vector of two
  785. variables with commas turned off.  Calc will display the former
  786. case as @samp{[(a b)]}.  You can disable these extra parentheses
  787. (to make the output less cluttered at the expense of allowing some
  788. ambiguity) by adding the letter @code{P} to the control string you
  789. give to @kbd{v ]} (as described above).
  790. X
  791. @kindex v .
  792. @pindex calc-full-vectors
  793. The @kbd{v .} (@code{calc-full-vectors}) command turns abbreviated
  794. display of long vectors on and off.  In this mode, vectors of six
  795. or more elements, or matrices of six or more rows or columns, will
  796. be displayed in an abbreviated form that displays only the first
  797. three elements and the last element:  @samp{[a, b, c, ..., z]}.
  798. When very large vectors are involved this will substantially
  799. improve Calc's display speed.
  800. X
  801. @kindex t .
  802. @pindex calc-full-trail-vectors
  803. The @kbd{t .} (@code{calc-full-trail-vectors}) command controls a
  804. similar mode for recording vectors in the Trail.  If you turn on
  805. this mode, vectors of six or more elements and matrices of six or
  806. more rows or columns will be abbreviated when they are put in the
  807. Trail.  The @kbd{t y} (@code{calc-trail-yank}) command will be
  808. unable to recover those vectors.  If you are working with very
  809. large vectors, this mode will improve the speed of all operations
  810. that involve the trail.
  811. X
  812. @kindex v /
  813. @pindex calc-break-vectors
  814. The @kbd{v /} (@code{calc-break-vectors}) command turns multi-line
  815. vector display on and off.  Normally, matrices are displayed with one
  816. row per line but all other types of vectors are displayed in a single
  817. line.  This mode causes all vectors, whether matrices or not, to be
  818. displayed with a single element per line.  Sub-vectors within the
  819. vectors will still use the normal linear form.
  820. X
  821. @node Algebra, Units, Matrix Functions, Top
  822. @chapter Algebra
  823. X
  824. @noindent
  825. This section covers the Calc features that help you work with
  826. algebraic formulas.  First, the general sub-formula selection
  827. mechanism is described; this works in conjunction with any Calc
  828. commands.  Then, commands for specific algebraic operations are
  829. described.  Finally, the flexible @dfn{rewrite rule} mechanism
  830. is discussed.
  831. X
  832. The algebraic commands use the @kbd{a} key prefix; selection
  833. commands use the @kbd{j} (for ``just a letter that wasn't used
  834. for anything else'') prefix.
  835. X
  836. @xref{Editing Stack Entries}, to see how to manipulate formulas
  837. using regular Emacs editing commands.@refill
  838. X
  839. When doing algebraic work, you may find several of the Calculator's
  840. modes to be helpful, including algebraic-simplification mode (@kbd{m A})
  841. or no-simplification mode (@kbd{m O}),
  842. algebraic-entry mode (@kbd{m a}), fraction mode (@kbd{m f}), and
  843. symbolic mode (@kbd{m s}).  @xref{Mode Settings}, for discussions
  844. of these modes.  You may also wish to select ``big'' display mode (@kbd{d B}).
  845. @xref{Normal Language Modes}.@refill
  846. X
  847. @menu
  848. * Selecting Subformulas::
  849. * Algebraic Manipulation::
  850. * Simplifying Formulas::
  851. * Polynomials::
  852. * Calculus::
  853. * Solving Equations::
  854. * Numerical Solutions::
  855. * Curve Fitting::
  856. * Summations::
  857. * Logical Operations::
  858. * Rewrite Rules::
  859. @end menu
  860. X
  861. @node Selecting Subformulas, Algebraic Manipulation, Algebra, Algebra
  862. @section Selecting Sub-Formulas
  863. X
  864. @noindent
  865. @cindex Selections
  866. @cindex Sub-formulas
  867. @cindex Parts of formulas
  868. When working with an algebraic formula it is often necessary to
  869. manipulate a portion of the formula rather than the formula as a
  870. whole.  Calc allows you to ``select'' a portion of any formula on
  871. the stack.  Commands which would normally operate on that stack
  872. entry will now operate only on the sub-formula, leaving the
  873. surrounding part of the stack entry alone.
  874. X
  875. One common non-algebraic use for selection involves vectors.  To work
  876. on one element of a vector in-place, simply select that element as a
  877. ``sub-formula'' of the vector.
  878. X
  879. @menu
  880. * Making Selections::
  881. * Changing Selections::
  882. * Displaying Selections::
  883. * Operating on Selections::
  884. * Rearranging with Selections::
  885. @end menu
  886. X
  887. @node Making Selections, Changing Selections, Selecting Subformulas, Selecting Subformulas
  888. @subsection Making Selections
  889. X
  890. @noindent
  891. @kindex j s
  892. @pindex calc-select-here
  893. To select a sub-formula, move the Emacs cursor to any character in that
  894. sub-formula, and press @kbd{j s} (@code{calc-select-here}).  Calc will
  895. highlight the smallest portion of the formula that contains that
  896. character.  By default the sub-formula is highlighted by blanking out
  897. all of the rest of the formula with dots.  Selection works in any
  898. display mode but is perhaps easiest in ``big'' (@kbd{d B}) mode.
  899. Suppose you enter the following formula:
  900. X
  901. @group
  902. @smallexample
  903. X           3    ___
  904. X    (a + b)  + V c
  905. 1:  ---------------
  906. X        2 x + 1
  907. @end smallexample
  908. @end group
  909. X
  910. @noindent
  911. (by typing @kbd{' ((a+b)^3 + sqrt(c)) / (2x+1)}).  If you move the
  912. cursor to the letter @samp{b} and press @kbd{j s}, the display changes
  913. to
  914. X
  915. @group
  916. @smallexample
  917. X           .    ...
  918. X    .. . b.  . . .
  919. 1*  ...............
  920. X        . . . .
  921. @end smallexample
  922. @end group
  923. X
  924. @noindent
  925. Every character not part of the sub-formula @samp{b} has been changed
  926. to a dot.  The @samp{*} next to the line number is to remind you that
  927. the formula has a portion of it selected.  (In this case, it's very
  928. obvious, but it might not always be.  If Embedded Mode is enabled,
  929. the word @samp{Sel} also appears in the mode line because the stack
  930. may not be visible.  @pxref{Embedded Mode}.)
  931. X
  932. If you had instead placed the cursor on the parenthesis immediately to
  933. the right of the @samp{b}, the selection would have been:
  934. X
  935. @group
  936. @smallexample
  937. X           .    ...
  938. X    (a + b)  . . .
  939. 1*  ...............
  940. X        . . . .
  941. @end smallexample
  942. @end group
  943. X
  944. @noindent
  945. The portion selected is always large enough to be considered a complete
  946. formula all by itself, so selecting the parenthesis selects the whole
  947. formula that it encloses.  Putting the cursor on the the @samp{+} sign
  948. would have had the same effect.
  949. X
  950. (Strictly speaking, the Emacs cursor is really the manifestation of
  951. the Emacs ``point,'' which is a position @emph{between} two characters
  952. in the buffer.  So purists would say that Calc selects the smallest
  953. sub-formula which contains the character to the right of ``point.'')
  954. X
  955. If you supply a numeric prefix argument @var{n}, the selection is
  956. expanded to the @var{n}th enclosing sub-formula.  Thus, positioning
  957. the cursor on the @samp{b} and typing @kbd{C-u 1 j s} will select
  958. @samp{a + b}; typing @kbd{C-u 2 j s} will select @samp{(a + b)^3},
  959. and so on.
  960. X
  961. If the cursor is not on any part of the formula, or if you give a
  962. numeric prefix that is too large, the entire formula is selected.
  963. X
  964. If the cursor is on the @samp{.} line that marks the top of the stack
  965. (i.e., its normal ``rest position''), this command selects the entire
  966. formula at stack level 1.  Most selection commands similarly operate
  967. on the formula at the top of the stack if you haven't positioned the
  968. cursor on any stack entry.
  969. X
  970. @kindex j a
  971. @pindex calc-select-additional
  972. The @kbd{j a} (@code{calc-select-additional}) command enlarges the
  973. current selection to encompass the cursor.  To select the smallest
  974. sub-formula defined by two different points, move to the first and
  975. press @kbd{j s}, then move to the other and press @kbd{j a}.  This
  976. is roughly analogous to using @code{set-mark-command} to select the
  977. two ends of a region of text during normal Emacs editing.
  978. X
  979. @kindex j o
  980. @pindex calc-select-once
  981. The @kbd{j o} (@code{calc-select-once}) command selects a formula in
  982. exactly the same way as @kbd{j s}, except that the selection will
  983. last only as long as the next command that uses it.  For example,
  984. @kbd{j o 1 +} is a handy way to add one to the sub-formula indicated
  985. by the cursor.
  986. X
  987. (A somewhat more precise definition: The @kbd{j o} command sets a flag
  988. such that the next command involving selected stack entries will clear
  989. the selections on those stack entries afterwards.  All other selection
  990. commands except @kbd{j a} and @kbd{j O} clear this flag.)
  991. X
  992. @kindex j S
  993. @kindex j O
  994. @pindex calc-select-here-maybe
  995. @pindex calc-select-once-maybe
  996. The @kbd{j S} (@code{calc-select-here-maybe}) and @kbd{j O}
  997. (@code{calc-select-once-maybe}) commands are equivalent to @kbd{j s}
  998. and @kbd{j o}, respectively, except that if the formula already
  999. has a selection they have no effect.  This is analogous to the
  1000. behavior of some commands such as @kbd{j r} (@code{calc-rewrite-selection};
  1001. @pxref{Selections with Rewrite Rules}) and is mainly intended to be
  1002. used in keyboard macros that implement your own selection-oriented
  1003. commands.@refill
  1004. X
  1005. Selection of sub-formulas normally treats associative terms like
  1006. @samp{a + b - c + d} and @samp{x * y * z} as single levels of the formula.
  1007. If you place the cursor anywhere inside @samp{a + b - c + d} except
  1008. on one of the variable names and use @kbd{j s}, you will select the
  1009. entire four-term sum.
  1010. X
  1011. @kindex j b
  1012. @pindex calc-break-selections
  1013. The @kbd{j b} (@code{calc-break-selections}) command controls a mode
  1014. in which the ``deep structure'' of these associative formulas shows
  1015. through.  Calc actually stores the above formulas as @samp{((a + b) - c) + d}
  1016. and @samp{x * (y * z)} (note that for certain obscure reasons, Calc
  1017. treats multiplication as right-associative).  Once you have enabled
  1018. @kbd{j b} mode, selecting with the cursor on the @samp{-} sign would
  1019. only select the @samp{a + b - c} portion, which makes sense when the
  1020. deep structure of the sum is considered.  There is no way to select
  1021. the @samp{b - c + d} portion; although this might initially look
  1022. like just as legitimate a sub-formula as @samp{a + b - c}, the deep
  1023. structure shows that it isn't.  The @kbd{d U} command can be used
  1024. to view the deep structure of any formula (@pxref{Normal Language Modes}).
  1025. X
  1026. When @kbd{j b} mode has not been enabled, the deep structure is
  1027. generally hidden by the selection commands---what you see is what
  1028. you get.
  1029. X
  1030. @kindex j u
  1031. @pindex calc-unselect
  1032. The @kbd{j u} (@code{calc-unselect}) command unselects the formula
  1033. that the cursor is on.  If there was no selection in the formula,
  1034. this command has no effect.  With a numeric prefix argument, it
  1035. unselects that stack element rather than using the cursor position.
  1036. X
  1037. @kindex j c
  1038. @pindex calc-clear-selections
  1039. The @kbd{j c} (@code{calc-clear-selections}) command unselects all
  1040. stack elements.
  1041. X
  1042. @node Changing Selections, Displaying Selections, Making Selections, Selecting Subformulas
  1043. @subsection Changing Selections
  1044. X
  1045. @noindent
  1046. @kindex j m
  1047. @pindex calc-select-more
  1048. Once you have selected a sub-formula, you can expand it using the
  1049. @w{@kbd{j m}} (@code{calc-select-more}) command.  If @samp{a + b} is
  1050. selected, pressing @w{@kbd{j m}} repeatedly works as follows:
  1051. X
  1052. @group
  1053. @smallexample
  1054. X           3    ...                3    ___                3    ___
  1055. X    (a + b)  . . .          (a + b)  + V c          (a + b)  + V c
  1056. 1*  ...............     1*  ...............     1*  ---------------
  1057. X        . . . .                 . . . .                 2 x + 1
  1058. @end smallexample
  1059. @end group
  1060. X
  1061. @noindent
  1062. In the last example, the entire formula is selected.  This is roughly
  1063. the same as having no selection at all, but because there are subtle
  1064. differences the @samp{*} character is still there on the line number.
  1065. X
  1066. With a numeric prefix argument @var{n}, @kbd{j m} expands @var{n}
  1067. times (or until the entire formula is selected).  Note that @kbd{j s}
  1068. with argument @var{n} is equivalent to plain @kbd{j s} followed by
  1069. @kbd{j m} with argument @var{n}.  If @w{@kbd{j m}} is used when there
  1070. is no current selection, it is equivalent to @w{@kbd{j s}}.
  1071. X
  1072. Even though @kbd{j m} does not explicitly use the location of the
  1073. cursor within the formula, it nevertheless uses the cursor to determine
  1074. which stack element to operate on.  As usual, @kbd{j m} when the cursor
  1075. is not on any stack element operates on the top stack element.
  1076. X
  1077. @kindex j l
  1078. @pindex calc-select-less
  1079. The @kbd{j l} (@code{calc-select-less}) command reduces the current
  1080. selection around the cursor position.  That is, it selects the
  1081. immediate sub-formula of the current selection which contains the
  1082. cursor, the opposite of @kbd{j m}.  If the cursor is not inside the
  1083. current selection, the command de-selects the formula.
  1084. X
  1085. @kindex j 1-9
  1086. @pindex calc-select-part
  1087. The @kbd{j 1} through @kbd{j 9} (@code{calc-select-part}) commands
  1088. select the @var{n}th sub-formula of the current selection.  They are
  1089. like @kbd{j l} (@code{calc-select-less}) except they use counting
  1090. rather than the cursor position to decide which sub-formula to select.
  1091. For example, if the current selection is @kbd{a + b + c} or
  1092. @kbd{f(a, b, c)} or @kbd{[a, b, c]}, then @kbd{j 1} selects @samp{a},
  1093. @kbd{j 2} selects @samp{b}, and @kbd{j 3} selects @samp{c}; in each of
  1094. these cases, @kbd{j 4} through @kbd{j 9} would be errors.
  1095. X
  1096. If there is no current selection, @kbd{j 1} through @kbd{j 9} select
  1097. the @var{n}th top-level sub-formula.  (In other words, they act as if
  1098. the entire stack entry were selected first.)  To select the @var{n}th
  1099. sub-formula where @var{n} is greater than nine, you must instead invoke
  1100. @w{@kbd{j 1}} with @var{n} as a numeric prefix argument.@refill
  1101. X
  1102. @kindex j n
  1103. @kindex j p
  1104. @pindex calc-select-next
  1105. @pindex calc-select-previous
  1106. The @kbd{j n} (@code{calc-select-next}) and @kbd{j p}
  1107. (@code{calc-select-previous}) commands change the current selection
  1108. to the next or previous sub-formula at the same level.  For example,
  1109. if @samp{b} is selected in @samp{2 + a*b*c + x}, then @kbd{j n}
  1110. selects @samp{c}.  Further @kbd{j n} commands would be in error because,
  1111. even though there is something to the right of @samp{c} (namely, @samp{x}),
  1112. it is not at the same level; in this case, it is not a term of the
  1113. same product as @samp{b} and @samp{c}.  However, @kbd{j m} (to select
  1114. the whole product @samp{a*b*c} as a term of the sum) followed by
  1115. @w{@kbd{j n}} would successfully select the @samp{x}.
  1116. X
  1117. Similarly, @kbd{j p} moves the selection from the @samp{b} in this
  1118. sample formula to the @samp{a}.  Both commands accept numeric prefix
  1119. arguments to move several steps at a time.
  1120. X
  1121. It is interesting to compare Calc's selection commands with the
  1122. Emacs Info system's commands for navigating through hierarchically
  1123. organized documentation.  Calc's @kbd{j n} command is completely
  1124. analogous to Info's @kbd{n} command.  Likewise, @kbd{j p} maps to
  1125. @kbd{p}, @kbd{j 2} maps to @kbd{2}, and Info's @kbd{u} is like @kbd{j m}.
  1126. (Note that @kbd{j u} stands for @code{calc-unselect}, not ``up''.)
  1127. The Info @kbd{m} command is somewhat similar to Calc's @kbd{j s} and
  1128. @kbd{j l}; in each case, you can jump directly to a sub-component
  1129. of the hierarchy simply by pointing to it with the cursor.
  1130. X
  1131. @node Displaying Selections, Operating on Selections, Changing Selections, Selecting Subformulas
  1132. @subsection Displaying Selections
  1133. X
  1134. @noindent
  1135. @kindex j d
  1136. @pindex calc-show-selections
  1137. The @kbd{j d} (@code{calc-show-selections}) command controls how
  1138. selected sub-formulas are displayed.  One of the alternatives is
  1139. illustrated in the above examples; if we press @kbd{j d} we switch
  1140. to the other style in which the selected portion itself is obscured
  1141. by @samp{#} signs:
  1142. X
  1143. @group
  1144. @smallexample
  1145. X           3    ...                  #    ___
  1146. X    (a + b)  . . .            ## # ##  + V c
  1147. 1*  ...............       1*  ---------------
  1148. X        . . . .                   2 x + 1
  1149. @end smallexample
  1150. @end group
  1151. X
  1152. @node Operating on Selections, Rearranging with Selections, Displaying Selections, Selecting Subformulas
  1153. @subsection Operating on Selections
  1154. X
  1155. @noindent
  1156. Once a selection is made, all Calc commands that manipulate items
  1157. on the stack will operate on the selected portions of the items
  1158. instead.  (Note that several stack elements may have selections
  1159. at once, though there can be only one selection at a time in any
  1160. given stack element.)
  1161. X
  1162. @kindex j e
  1163. @pindex calc-enable-selections
  1164. The @kbd{j e} (@code{calc-enable-selections}) command disables the
  1165. effect that selections have on Calc commands.  The current selections
  1166. still exist, but Calc commands operate on whole stack elements anyway.
  1167. This mode can be identified by the fact that the @samp{*} markers on
  1168. the line numbers are gone, even though selections are visible.  To
  1169. reactivate the selections, press @kbd{j e} again.
  1170. X
  1171. To extract a sub-formula as a new formula, simply press @key{RET}.
  1172. This normally duplicates the top stack element; here it duplicates
  1173. only the selected portion of that element.
  1174. X
  1175. To replace a sub-formula with something different, you can enter the
  1176. new value onto the stack and press @key{TAB}.  This normally exchanges
  1177. the top two stack elements; here it swaps the value you entered into
  1178. the selected portion of the formula, returning the old selected
  1179. portion to the top of the stack.
  1180. X
  1181. @group
  1182. @smallexample
  1183. X           3    ...                    ...                    ___
  1184. X    (a + b)  . . .           17 x y . . .           17 x y + V c
  1185. 2*  ...............      2*  .............      2:  -------------
  1186. X        . . . .                 . . . .                2 x + 1
  1187. X
  1188. X                                    3                      3
  1189. 1:  17 x y               1:  (a + b)            1:  (a + b)
  1190. @end smallexample
  1191. @end group
  1192. X
  1193. In this example we select a sub-formula of our original example,
  1194. enter a new formula, @key{TAB} it into place, then deselect to see
  1195. the complete, edited formula.
  1196. X
  1197. If you want to swap whole formulas around even though they contain
  1198. selections, just use @kbd{j e} before and after.
  1199. X
  1200. @kindex j '
  1201. @pindex calc-enter-selection
  1202. The @kbd{j '} (@code{calc-enter-selection}) command is another way
  1203. to replace a selected sub-formula.  This command does an algebraic
  1204. entry just like the regular @kbd{'} key.  When you press @key{RET},
  1205. the formula you type replaces the original selection.  You can use
  1206. the @samp{$} symbol in the formula to refer to the original
  1207. selection.  If there is no selection in the formula under the cursor,
  1208. the cursor is used to make a temporary selection for the purposes of
  1209. the command.  Thus, to change a term of a formula, all you have to
  1210. do is move the Emacs cursor to that term and press @kbd{j '}.
  1211. X
  1212. @kindex j `
  1213. @pindex calc-edit-selection
  1214. The @kbd{j `} (@code{calc-edit-selection}) command is a similar
  1215. analogue of the @kbd{`} (@code{calc-edit}) command.  It edits the
  1216. selected sub-formula in a separate buffer.  If there is no
  1217. selection, it edits the sub-formula indicated by the cursor.
  1218. X
  1219. To delete a sub-formula, press @key{DEL}.  This generally replaces
  1220. the sub-formula with the constant zero, but in a few suitable contexts
  1221. it uses the constant one instead.  The @key{DEL} key automatically
  1222. deselects and re-simplifies the entire formula afterwards.  Thus:
  1223. X
  1224. @group
  1225. @smallexample
  1226. X              ###
  1227. X    17 x y + # #          17 x y         17 # y          17 y
  1228. 1*  -------------     1:  -------    1*  -------    1:  -------
  1229. X       2 x + 1            2 x + 1        2 x + 1        2 x + 1
  1230. @end smallexample
  1231. @end group
  1232. X
  1233. In this example, we first delete the @samp{sqrt(c)} term; Calc
  1234. accomplishes this by replacing @samp{sqrt(c)} with zero and
  1235. resimplifying.  We then delete the @kbd{x} in the numerator;
  1236. since this is part of a product, Calc replaces it with @samp{1}
  1237. and resimplifies.
  1238. X
  1239. If you select an element of a vector and press @key{DEL}, that
  1240. element is deleted from the vector.  If you delete one side of
  1241. an equation or inequality, only the opposite side remains.
  1242. X
  1243. @kindex j DEL
  1244. @pindex calc-del-selection
  1245. The @kbd{j @key{DEL}} (@code{calc-del-selection}) command is like
  1246. @key{DEL} but with the auto-selecting behavior of @kbd{j '} and
  1247. @kbd{j `}.  It deletes the selected portion of the formula
  1248. indicated by the cursor, or, in the absence of a selection, it
  1249. deletes the sub-formula indicated by the cursor position.
  1250. X
  1251. @kindex j RET
  1252. @pindex calc-grab-selection
  1253. (There is also an auto-selecting @kbd{j @key{RET}} (@code{calc-copy-selection})
  1254. command.)
  1255. X
  1256. Normal arithmetic operations also apply to sub-formulas.  Here we
  1257. select the denominator, press @kbd{5 -} to subtract five from the
  1258. denominator, press @kbd{n} to negate the denominator, then
  1259. press @kbd{Q} to take the square root.
  1260. X
  1261. @group
  1262. @smallexample
  1263. X     .. .           .. .           .. .             .. .
  1264. 1*  .......    1*  .......    1*  .......    1*  ..........
  1265. X    2 x + 1        2 x - 4        4 - 2 x         _________
  1266. X                                                 V 4 - 2 x
  1267. @end smallexample
  1268. @end group
  1269. X
  1270. Certain types of operations on selections are not allowed.  For
  1271. example, for an arithmetic function like @kbd{-} no more than one of
  1272. the arguments may be a selected sub-formula.  (As the above example
  1273. shows, the result of the subtraction is spliced back into the argument
  1274. which had the selection; if there were more than one selection involved,
  1275. this would not be well-defined.)  If you try to subtract two selections,
  1276. the command will abort with an error message.
  1277. X
  1278. Operations on sub-formulas sometimes leave the formula as a whole
  1279. in an ``un-natural'' state.  Consider negating the @samp{2 x} term
  1280. of our sample formula by selecting it and pressing @kbd{n}
  1281. (@code{calc-change-sign}).@refill
  1282. X
  1283. @group
  1284. @smallexample
  1285. X       .. .                .. .
  1286. 1*  ..........      1*  ...........
  1287. X     .........           ..........
  1288. X    . . . 2 x           . . . -2 x
  1289. @end smallexample
  1290. @end group
  1291. X
  1292. Unselecting the sub-formula reveals that the minus sign, which would
  1293. normally have cancelled out with the subtraction automatically, has
  1294. not been able to do so because the subtraction was not part of the
  1295. selected portion.  Pressing @kbd{=} (@code{calc-evaluate}) or doing
  1296. any other mathematical operation on the whole formula will cause it
  1297. to be simplified.
  1298. X
  1299. @group
  1300. @smallexample
  1301. X       17 y                17 y
  1302. 1:  -----------     1:  ----------
  1303. X     __________          _________
  1304. X    V 4 - -2 x          V 4 + 2 x
  1305. @end smallexample
  1306. SHAR_EOF
  1307. true || echo 'restore of calc.texinfo failed'
  1308. fi
  1309. echo 'End of  part 44'
  1310. echo 'File calc.texinfo is continued in part 45'
  1311. echo 45 > _shar_seq_.tmp
  1312. exit 0
  1313. exit 0 # Just in case...
  1314. -- 
  1315. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  1316. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  1317. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  1318. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  1319.